home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / nfsmount / RCS / mount.c,v < prev    next >
Text File  |  1989-10-10  |  9KB  |  417 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.5
  10. date     89.10.10.13.17.09;  author douglis;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     89.02.02.15.05.21;  author brent;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     88.11.14.15.14.07;  author brent;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     88.11.14.15.12.50;  author brent;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     88.11.02.12.42.51;  author brent;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @Routines to interface to the Sun Mount protocol
  37. @
  38.  
  39.  
  40. 1.5
  41. log
  42. @Changed void * to VoidPtr to remove lint
  43. @
  44. text
  45. @/*
  46.  * mount.c --
  47.  * 
  48.  *    Utility procedures for using the Sun Mount protocol.
  49.  *
  50.  * Copyright 1988 Regents of the University of California
  51.  * Permission to use, copy, modify, and distribute this
  52.  * software and its documentation for any purpose and without
  53.  * fee is hereby granted, provided that the above copyright
  54.  * notice appear in all copies.  The University of California
  55.  * makes no representations about the suitability of this
  56.  * software for any purpose.  It is provided "as is" without
  57.  * express or implied warranty.
  58.  */
  59. #ifndef lint
  60. static char rcsid[] = "$Header: /a/newcmds/nfsmount/RCS/mount.c,v 1.4 89/02/02 15:05:21 brent Exp Locker: douglis $ SPRITE (Berkeley)";
  61. #endif not lint
  62.  
  63. #include "stdio.h"
  64.  
  65. #include "nfs.h"
  66.  
  67.  
  68. /*
  69.  *----------------------------------------------------------------------
  70.  *
  71.  * Nfs_MountInitClient --
  72.  *
  73.  *    Set up the CLIENT data structure needed to do SUN RPC to the
  74.  *    mount program running on a particular host.
  75.  * 
  76.  * Results:
  77.  *    None.
  78.  *
  79.  * Side effects:
  80.  *    Calls clnt_create which sets up sockets and other related state.
  81.  *
  82.  *----------------------------------------------------------------------
  83.  */
  84. CLIENT *
  85. Nfs_MountInitClient(host)
  86.     char *host;
  87. {
  88.     register CLIENT *clnt;
  89.     int voidArg;
  90.     VoidPtr voidRes;
  91.  
  92.     clnt = clnt_create(host, MOUNTPROG, MOUNTVERS, "udp");
  93.     if (clnt == (CLIENT *)NULL) {
  94.     clnt_pcreateerror(host);
  95.     } else {
  96.     clnt->cl_auth = authunix_create_default();
  97.     voidRes = mountproc_null_1(&voidArg, clnt);
  98.     if (voidRes == (VoidPtr)NULL) {
  99.         clnt_perror(clnt, "mountproc_null_1");
  100.     } else if (pdev_Trace) {
  101.         printf("Null RPC to Mount service at %s succeeded\n", host);
  102.     }
  103.     }
  104.     return(clnt);
  105. }
  106.  
  107. /*
  108.  *----------------------------------------------------------------------
  109.  *
  110.  * Nfs_MountTest --
  111.  *
  112.  *    Test the mount protocol by making a null rpc to the mount server.
  113.  * 
  114.  * Results:
  115.  *    None.
  116.  *
  117.  * Side effects:
  118.  *    Prints an error and exits the process if the RPC fails.
  119.  *
  120.  *----------------------------------------------------------------------
  121.  */
  122. void
  123. Nfs_MountTest(clnt, host)
  124.     CLIENT *clnt;
  125.     char *host;
  126. {
  127.     char voidArg;
  128.     VoidPtr voidRes;
  129.  
  130.     voidRes = mountproc_null_1(&voidArg, clnt);
  131.     if (voidRes == (VoidPtr)NULL) {
  132.     clnt_perror(clnt, "mountproc_null_1");
  133.     exit(1);
  134.     } else {
  135.     extern int pdev_Trace;
  136.     if (pdev_Trace) {
  137.         printf("Null RPC to MOUNTPROG at %s succeeded\n", host);
  138.     }
  139.     }
  140. }
  141.  
  142. /*
  143.  *----------------------------------------------------------------------
  144.  *
  145.  * Nfs_Mount --
  146.  *
  147.  *    Called to mount a NFS filesystem.  This does a mount RPC and returns
  148.  *    the nfs_fh that is returned from the NFS server.
  149.  * 
  150.  * Results:
  151.  *    None.
  152.  *
  153.  * Side effects:
  154.  *    None here, but the server does remember that we've mounted from it.
  155.  *
  156.  *----------------------------------------------------------------------
  157.  */
  158. nfs_fh *
  159. Nfs_Mount(clnt, rfs)
  160.     CLIENT *clnt;
  161.     dirpath rfs;
  162. {
  163.     register fhstatus *statusPtr;
  164.     register nfs_fh *handlePtr;
  165.  
  166.     statusPtr = mountproc_mnt_1(&rfs, clnt);
  167.     if (statusPtr == (fhstatus *)NULL) {
  168.     clnt_perror(clnt, "mountproc_mnt_1");
  169.     handlePtr = (nfs_fh *)NULL;
  170.     } else if (statusPtr->fhs_status != 0) {
  171.     errno = statusPtr->fhs_status;
  172.     perror(rfs);
  173.     handlePtr = (nfs_fh *)NULL;
  174.     } else {
  175.     /*
  176.      * The mount.x protocol definition and the nfs_prot.x protocol def
  177.      * have slightly different ways of defining a "file handle".  Both
  178.      * are FHSIZE bytes of opaque data, however, so we can safely copy
  179.      * the "fhandle" returned by the mount in to a "nfs_fh" used
  180.      * by the nfs routines.
  181.      */
  182.     handlePtr = (nfs_fh *)malloc(sizeof(nfs_fh));
  183.     bcopy((char *)statusPtr->fhstatus_u.fhs_fhandle, (char *)handlePtr,
  184.         FHSIZE);
  185.     }
  186.  
  187.     return(handlePtr);
  188. }
  189.  
  190. /*
  191.  *----------------------------------------------------------------------
  192.  *
  193.  * Nfs_MountDump --
  194.  *
  195.  *    This dumps out what filesystems have been mounted by the client.
  196.  *    To find out, this does an RPC to the server to which we are bound.
  197.  * 
  198.  * Results:
  199.  *    None.
  200.  *
  201.  * Side effects:
  202.  *    Print statements.
  203.  *
  204.  *----------------------------------------------------------------------
  205.  */
  206. void
  207. Nfs_MountDump(clnt)
  208.     CLIENT *clnt;
  209. {
  210.     register mountlist *listPtr;
  211.     VoidPtr voidArg;
  212.  
  213.     listPtr = mountproc_dump_1(&voidArg, clnt);
  214.     if (listPtr == (mountlist *)NULL) {
  215.     clnt_perror(clnt, "mountproc_dump_1");
  216.     return;
  217.     }
  218.     printf("Mount List\n");
  219.     do {
  220.     printf("%s:%s\n", listPtr->ml_hostname, listPtr->ml_directory);
  221.     listPtr = listPtr->ml_next;
  222.     } while (listPtr);
  223.  
  224.     return;
  225. }
  226.  
  227. /*
  228.  *----------------------------------------------------------------------
  229.  *
  230.  * Nfs_Exports --
  231.  *
  232.  *    This dumps out what filesystems are exported by the server
  233.  *    to which we are bound.
  234.  * 
  235.  * Results:
  236.  *    None.
  237.  *
  238.  * Side effects:
  239.  *    Print statements.
  240.  *
  241.  *----------------------------------------------------------------------
  242.  */
  243. void
  244. Nfs_Exports(clnt, host)
  245.     CLIENT *clnt;
  246.     char *host;
  247. {
  248.     register exports listPtr, *listPtrPtr;
  249.     register groups groupPtr;
  250.     VoidPtr voidArg;
  251.  
  252.     listPtrPtr = mountproc_export_1(&voidArg, clnt);
  253.     if (listPtrPtr == (exports *)NULL) {
  254.     clnt_perror(clnt, "mountproc_export_1");
  255.     return;
  256.     }
  257.     listPtr = *listPtrPtr;
  258.     printf("Export List of %s\n", host);
  259.     do {
  260.     printf("%s exported to: ", listPtr->ex_dir);
  261.     groupPtr = listPtr->ex_groups;
  262.     while(groupPtr) {
  263.         printf("%s ", groupPtr->gr_name);
  264.         groupPtr = groupPtr->gr_next;
  265.     }
  266.     printf("\n");
  267.     listPtr = listPtr->ex_next;
  268.     } while (listPtr);
  269.  
  270.     return;
  271. }
  272.  
  273. /*
  274.  *----------------------------------------------------------------------
  275.  *
  276.  * Nfs_UnmountAll --
  277.  *
  278.  *    Called to unmount all our NFS filesystems..
  279.  * 
  280.  * Results:
  281.  *    None.
  282.  *
  283.  * Side effects:
  284.  *    Ideally invalidates our fhandles for mounted filesystems,
  285.  *    but probably just erases our name from a list on the server.
  286.  *
  287.  *----------------------------------------------------------------------
  288.  */
  289. void
  290. Nfs_UnmountAll(clnt)
  291.     CLIENT *clnt;
  292. {
  293.     char voidArg;
  294.     VoidPtr voidRes;
  295.  
  296.     voidRes = mountproc_null_1(&voidArg, clnt);
  297.     if (voidRes == (VoidPtr)NULL) {
  298.     clnt_perror(clnt, "mountproc_umntall_1");
  299.     }
  300. }
  301.  
  302. /*
  303.  *----------------------------------------------------------------------
  304.  *
  305.  * Nfs_Unmount --
  306.  *
  307.  *    Called to unmount a NFS filesystem.
  308.  * 
  309.  * Results:
  310.  *    None.
  311.  *
  312.  * Side effects:
  313.  *    Nuke ourselves from the server's mount list.
  314.  *
  315.  *----------------------------------------------------------------------
  316.  */
  317. void
  318. Nfs_Unmount(clnt, rfs)
  319.     CLIENT *clnt;
  320.     dirpath rfs;
  321. {
  322.     VoidPtr voidRes;
  323.  
  324.     voidRes = mountproc_umnt_1(&rfs, clnt);
  325.     if (voidRes == (VoidPtr)NULL) {
  326.     clnt_perror(clnt, "mountproc_umnt_1");
  327.     }
  328. }
  329. @
  330.  
  331.  
  332. 1.4
  333. log
  334. @Fixed use of tracing variable
  335. @
  336. text
  337. @d16 1
  338. a16 1
  339. static char rcsid[] = "$Header: /a/newcmds/nfssrv/RCS/mount.c,v 1.3 88/11/14 15:14:07 brent Exp $ SPRITE (Berkeley)";
  340. d46 1
  341. a46 1
  342.     void *voidRes;
  343. d54 1
  344. a54 1
  345.     if (voidRes == (void *)NULL) {
  346. d84 1
  347. a84 1
  348.     void *voidRes;
  349. d87 1
  350. a87 1
  351.     if (voidRes == (void *)NULL) {
  352. d167 1
  353. a167 1
  354.     void *voidArg;
  355. d206 1
  356. a206 1
  357.     void *voidArg;
  358. d250 1
  359. a250 1
  360.     void *voidRes;
  361. d253 1
  362. a253 1
  363.     if (voidRes == (void *)NULL) {
  364. d278 1
  365. a278 1
  366.     void *voidRes;
  367. d281 1
  368. a281 1
  369.     if (voidRes == (void *)NULL) {
  370. @
  371.  
  372.  
  373. 1.3
  374. log
  375. @Took out print statements
  376. @
  377. text
  378. @d16 1
  379. a16 1
  380. static char rcsid[] = "$Header: /a/newcmds/nfssrv/RCS/mount.c,v 1.2 88/11/14 15:12:50 brent Exp $ SPRITE (Berkeley)";
  381. d56 1
  382. a56 1
  383.     } else if (pdevTrace) {
  384. d91 2
  385. a92 2
  386.     extern int pdevTrace;
  387.     if (pdevTrace) {
  388. @
  389.  
  390.  
  391. 1.2
  392. log
  393. @Took out print statements
  394. @
  395. text
  396. @d16 1
  397. a16 1
  398. static char rcsid[] = "$Header: /a/newcmds/nfssrv/RCS/mount.c,v 1.1 88/11/02 12:42:51 brent Exp Locker: brent $ SPRITE (Berkeley)";
  399. d56 1
  400. a56 1
  401.     } else {
  402. @
  403.  
  404.  
  405. 1.1
  406. log
  407. @Initial revision
  408. @
  409. text
  410. @d16 1
  411. a16 1
  412. static char rcsid[] = "$Header: fsPfs.c,v 6.0 88/10/11 15:52:49 brent Exp $ SPRITE (Berkeley)";
  413. d91 4
  414. a94 1
  415.     printf("Null RPC to MOUNTPROG at %s succeeded\n", host);
  416. @
  417.